/**
 * 链表的奇偶重排
 * 
 * 描述

给定一个单链表，请设定一个函数，将链表的奇数位节点和偶数位节点分别放在一起，重排后输出。
注意是节点的编号而非节点的数值。

数据范围：节点数量满足 
0
≤
n
≤
1
0
5
0≤n≤10 
5
 ，节点中的值都满足 
0
≤
v
a
l
≤
1000
0≤val≤1000
要求：空间复杂度 
O
(
n
)
O(n)，时间复杂度 
O
(
n
)
O(n)
示例1

输入：
{1,2,3,4,5,6}
复制
返回值：
{1,3,5,2,4,6}
复制
说明：
1->2->3->4->5->6->NULL
重排后为
1->3->5->2->4->6->NULL
   
示例2

输入：
{1,4,6,3,7}
复制
返回值：
{1,6,7,4,3}
复制
说明：
1->4->6->3->7->NULL
重排后为
1->6->7->4->3->NULL
奇数位节点有1,6,7，偶数位节点有4,3。重排后为1,6,7,4,3
   
备注：

链表长度不大于200000。每个数范围均在int内。
 */
public class 链表的奇偶重排 {
    
    public static void main(String[] args) {
        
        ListNode node = new ListNode(1);
        node.next = new ListNode(2);
        node.next.next = new ListNode(3);
        node.next.next.next = new ListNode(4);
        node.next.next.next.next = new ListNode(5);
        node.next.next.next.next.next = new ListNode(6);

        ListNode pre = oddEvenList(node);

        System.out.println(pre.toString());

    }

    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public static ListNode oddEvenList (ListNode head) {
        // write code here

        if (head == null) {
            return null;
        }
        ListNode odd = head;
        ListNode even = head.next;
        ListNode evenHead = even;
        while (even!= null && even.next!= null) {
            odd.next = even.next;
            odd = odd.next;
            even.next = odd.next;
            even = even.next;
        }
        odd.next = evenHead;
        return head;
    }
}
